/* 试编写在带头结点的单链表L中删除最小值点的高效算法（已知最小值唯一）*/

#include <iostream>
#include "headfun.h"
using namespace std;

// 删除最小值
void del_min(LNode *&L)
{
  LNode *p = L->next;
  
  // 指向最小值的前一个结点
  LNode *minp = L;
  
  // 遍历链表，找到最小值
  while (p->next != NULL)
  {
    if (p->next->data < minp->next->data)
      minp = p;
    p = p->next;
  }
  
  // 删除最小值
  LNode *u = minp->next;
  minp->next = u->next;
  free(u);
}

int main()
{
  // 创建链表
  LNode *L = head_Linklist();
  
  // 删除最小值
  del_min(L);
  
  // 遍历链表，打印信息
  LNode *q = L->next;
  while (q != NULL)
  {
    cout << q->data << " ";
    q = q->next;
  }
  return 0;
}
